﻿using Alumnos.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;

namespace Alumnos.Controllers
{
    public class UsuarioController : Controller
    {
        private AlumnosContext context = new AlumnosContext();

        public ActionResult Index()
        {
            return View(context.Usuarios.ToList());
        }

        [HttpGet]
        public ActionResult Add()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Add(ReigstroFormData usuario)
        {
            if (ModelState.IsValid)
            {
                WebSecurity.CreateUserAndAccount(usuario.Username, usuario.Password, new
                {
                    realName = usuario.RealName,
                    mail = usuario.Mail
                });

                return RedirectToAction("Index");
            }
            return View("Add", model: usuario);
        }
    }

    /// <summary>
    /// Esta clase es la estructura que recibimos de la vista con los datos del usario.
    /// 
    /// No es un modelo de la base de datos, es sólo una clase para facilitar el pasaje de información desde
    /// el action a la vista y viseversa y su validación. Ver como agrego por ejemplo que la contraseña debe tener al menos 4 caracteres,
    /// y como valido que la confirmación y la contraseña sean iguales.
    /// 
    /// No usamos el modelo Usuario porque a ese le faltan campos, como por ejemplo el Password o la confiramción de contraseña
    /// Y tal vez las restricciones que queremos aplicar a los datos no son los mismo.
    /// 
    /// Es una buena practica tener una clase para hacer este intercambio de informacion
    /// </summary>
    public class ReigstroFormData {
        [Required]
        public string Username { get; set; }

        [Required]
        [MinLength(4)]
        public string Password { get; set; }

        // Notar que uso el nombre completo, no solo Compare porque la clase compare existe tanto en el namespace
        // MVC como en DataAnnotations y por eso necesito el nombre completo para desambiguar.
        [System.ComponentModel.DataAnnotations.Compare("Password")]
        public string ConfirmPassword { get; set; }

        [Required]
        public string RealName { get; set; }

        [Required]
        public string Mail { get; set; }
    }

}
